import scrapy


class QuotesSpider(scrapy.Spider):  # 需要继承scrapy.Spider类
    # 定义蜘蛛名
    name = '<a href="http://www.scrapyd.cn/doc/149.html" target="_blank"><u>listSpider</u></a>'
    name = "item"
    start_urls = ['http://lab.scrapyd.cn']

    """    def start_requests(self):  # 由此方法通过下面链接爬取页面
         #  定义爬取的链接
        urls = [
            'http://lab.scrapyd.cn/page/1/',
            'http://lab.scrapyd.cn/page/2/',
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)  # 爬取到的页面如何处理？提交给parse方法处理
    """
    def parse(self, response):
        """
        start_requests已经爬取到页面，那如何提取我们想要的内容呢？那就可以在这个方法里面定义。
        这里的话，并木有定义，只是简单的把页面做了一个保存，并没有涉及提取我们想要的数据，后面会慢慢说到

        也就是用xpath、正则、或是css进行相应提取，这个例子就是让你看看scrapy运行的流程：
        1、定义链接；
        2、通过链接爬取（下载）页面；
        3、定义规则，然后提取数据；
        就是这么个流程，似不似很简单呀？
        """

        page = response.url.split("/")[-2]  # 根据上面的链接提取分页,如：/page/1/，提取到的就是：1
        filename = 'DemoPA-%s.html' % page  # 拼接文件名，如果是第一页，最终文件名便是：DemoPA-1.html
        with open(filename, 'wb') as f:  # python document action
            f.write(response.body)  # 刚才下载的页面去哪里了？response.body就代表了刚才下载的页面！
        self.log('保存文件:%s' % filename)  # 打个日志

        # DemoPA = response.css('div.quote')[0]
        # # for v in DemoPA:  # 循环获取每一条名言的：内容、标签、主义者
        #
        # text = DemoPA.css('.text:text').extract_first()  # 提取名言
        # autor = DemoPA.css('.author::text').extract_first()  # 提取作者
        # tags = DemoPA.css('.tags .tag::text').extract()  # 提取标签
        # tags = ','.join(tags)  # 数组转换为字符串
        #
        # filename1 = '%s-语录.txt' % autor  # 爬取的内容存在文档autor-语录.txt中
        # f = open(filename1, "a+")  # 追加写入文件
        # f.write(text)  # 写入名言内容
        # f.write('\n')  # 换行
        # f.write('标签：' + tags)  # 写入标签
        # f.write('\n---------------\n')
        # f.close()  # 关闭文件操作
        # next_page = response.css('li.next a::attr(href)').extract_first()
        # if next_page is not  None:
        #     next_page = response.urljoin(next_page)
        #     yield scrapy.Request(next_page, callback=self.parse)
        """
        首先：我们使用：response.css('li.next a::attr(href)').extract_first()查看有木有存在下一页链接，
        如果存在的话，我们使用：urljoin(next_page)把相对路径，
        如：page/1转换为绝对路径，其实也就是加上网站域名，
        如：http://lab.scrapyd.cn/page/1；接下来就是爬取下一页或是内容页的秘诀所在，
        scrapy给我们提供了这么一个方法：scrapy.Request()  
        这个方法还有许多参数，后面我们慢慢说，这里我们只使用了两个参数，
        一个是：我们继续爬取的链接（next_page），这里是下一页链接，当然也可以是内容页；
        另一个是：我们要把链接提交给哪一个函数爬取，这里是parse函数，也就是本函数；
        当然，我们也可以在下面另写一个函数，比如：内容页，专门处理内容页的数据。
        经过这么一个函数，下一页链接又提交给了parse，那就可以不断的爬取了，直到不存在下一页； 
        """
